﻿using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ContaPlanner.Models
{
    public enum TipoAsiento
    {
        [Description("Pago con tarjeta (débito o crédito)")]
        PagoTarjeta,
        [Description("Recibo")]
        Recibo,
        [Description("Reintegro o ingreso")]
        ReintegroIngreso,
        [Description("Transferencia")]
        Transferencia,
        [Description("Pago en efectivo")]
        Efectivo,
        [Description("Nómina")]
        Nomina
    };

    [Table("Asientos")]
    public class Asiento
    {
        [Key]
        public int AsientoId { get; set; }
        public DateTime Fecha { get; set; }
        public Cuenta Origen { get; set; }
        public Ubicacion UbicacionOrigen { get; set; }
        public Cuenta Destino { get; set; }
        public Ubicacion UbicacionDestino { get; set; }
        public decimal Importe { get; set; }
        public TipoAsiento Tipo { get; set; }
        public Categoria Categoria { get; set; }

        public override string ToString()
        {
            return String.Format("{0} - de {1} {2} a {3} {4}: {5:C}, ({6}, {7})",
                Fecha.ToShortDateString(),
                (Origen != null ? Origen.Nombre : "(null)"),
                (UbicacionOrigen != null ? UbicacionOrigen.Nombre : "(sin ubicación)"),
                (Destino != null ? Destino.Nombre : "(null)"),
                (UbicacionDestino != null ? UbicacionDestino.Nombre : "(sin ubicación)"),
                Importe,
                Tipo.Descripcion(),
                Categoria.NombreCompleto
            );
        }
    }
}
